package com.nlelpct.manage.service;

import com.nlelpct.manage.model.entity.SysRole;
import com.nlelpct.manage.model.query.InsertAndUpdateRoleQuery;
import com.nlelpct.manage.model.query.RolePageQuery;
import com.nlelpct.manage.model.vo.*;

import java.util.List;

/**
 * @author :小马
 * @date : 2023-07-20
 */
public interface IRoleService {

    /**
     * 分页查询角色列表
     *
     * @param rolePageQuery 查询条件
     * @return 查询结果
     */
    ResponseResult<PageResultVo<SysRole>> queryRolePageList(RolePageQuery rolePageQuery);

    /**
     * 添加角色信息
     *
     * @param insertRoleQuery 要添加角色的基本信息
     */
    void insertRole(InsertAndUpdateRoleQuery insertRoleQuery);

    /**
     * 更新角色信息
     *
     * @param updateRoleQuery 更新的角色信息
     */
    void updateRole(InsertAndUpdateRoleQuery updateRoleQuery);

    /**
     * 通过角色ID获取角色配置的数据权限
     *
     * @param roleId 角色ID
     * @return 数据权限
     */
    ResponseResult<DataPermissionsVo> getDataPermissionsByRoleId(String roleId);

    /**
     * 添加角色-更新角色时判断角色名称是否重复
     *
     * @param validateRoleNameQuery 角色ID和名称
     * @return 判断结果 true为没有重复可以使用
     */
    ResponseResult<Boolean> validateRoleName(InsertAndUpdateRoleQuery validateRoleNameQuery);

    /**
     * 根据角色ID删除角色
     *
     * @param roleId 角色ID
     */
    void removeRole(String roleId);

    /**
     * 修改角色的数据权限
     *
     * @param dataPermissionsVo 数据权限VO
     */
    void changeDataPermissionsByRole(DataPermissionsVo dataPermissionsVo);

    /**
     * 获取角色所拥有的菜单权限
     *
     * @param roleId 角色ID
     * @return 菜单权限
     */
    ResponseResult<MenuPermissionsVo> getMenuByRoleId(String roleId);

    /**
     * 修改角色的菜单权限
     *
     * @param menuPermissionsVo 菜单权限VO
     */
    void changeMenuPermissionsByRole(MenuPermissionsVo menuPermissionsVo);

    /**
     * 更新时获取角色信息
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    ResponseResult<InsertAndUpdateRoleQuery> getRoleInfoByUpdate(String roleId);

    /**
     * 校验角色是否可以删除
     *
     * @param roleId 角色ID
     * @return 判断结果
     */
    ResponseResult<Boolean> deleteRoleValidate(String roleId);

    /**
     * 获取企业内的所有角色信息
     *
     * @return 角色信息
     */
    ResponseResult<List<RoleInfoForCompanyVo>> getRoleInfoForCompany();


}
